package com.wongoing.sys.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.wongoing.base.PageResult;
import com.wongoing.sys.model.SysPost;
import com.wongoing.sys.service.SysPostService;
import com.wongoing.sys.util.Constants;
import com.wongoing.sys.viewmodel.JsonResult;
import com.wongoing.util.LogService;
import com.wongoing.util.ModelAndViewConstants;
import com.wongoing.util.PageUtil;
import com.wongoing.util.Status;

@Controller
@RequestMapping("/sys/sysPostAction")
public class SysPostAction extends BaseAction{
	
	private SysPostService sysPostService;

	@Autowired
	public void setSysPostService(SysPostService sysPostService) {
		this.sysPostService = sysPostService;
	}
	/**
	 * 功能说明：进入列表显示界面
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:52:15
	 * @param pageSize 每页记录数
	 * @param pageCurrent 当前页索引
	 * @param orderField 排序字段
	 * @param orderDirection 排序方向
	 * @param paramPostName 参数：岗位名称
	 * @param paramRemark 参数：备注
	 * @return
	 */
	@RequestMapping(value="/toList")
	public ModelAndView toList(Integer pageSize, Integer pageCurrent, String orderField, String orderDirection,
			String paramPostName,String paramRemark){
		ModelAndView mv = null;
		try {
			mv = new ModelAndView();
			PageResult<SysPost> pageResult = PageUtil.pageSet(this.getClass(), pageSize, pageCurrent, orderField, orderDirection);
			//非通用判断条件
			pageResult.getParam().put("status", "0");
			//模糊查询判断
			List<Boolean> multiFuzzyQuery = new ArrayList<Boolean>();
			if(paramRemark != null && !"".equals(paramRemark)){
				pageResult.getParam().put("remark", paramRemark);
				pageResult.setOrderField("sp.Remark");
				pageResult.setOrderDirection("DESC");
				pageResult.getExt().put("paramRemark", paramRemark);
				multiFuzzyQuery.add(true);
			}else{
				multiFuzzyQuery.add(false);
			}
			if(paramPostName!=null && !"".equals(paramPostName)){
				pageResult.getParam().put("postName", paramPostName);
				pageResult.setOrderField("sp.PostName");
				pageResult.setOrderDirection("DESC");
				pageResult.getExt().put("paramPostName", paramPostName);
				multiFuzzyQuery.add(true);
			}else{
				multiFuzzyQuery.add(false);
			}
			if(PageUtil.multiFuzzyQuery(multiFuzzyQuery)){
				pageResult.setOrderField("sp.Id");
				pageResult.setOrderDirection("ASC");
			}
			pageResult = this.sysPostService.getPostListPageResult(pageResult);
			mv = new ModelAndView();
			mv.addObject(ModelAndViewConstants.PAGE_RESULT, pageResult);
			mv.setViewName(ModelAndViewConstants.POST_MAIN_VIEW);
			LogService.getInstance(this).debug("岗位分页数据列表获取成功："+ModelAndViewConstants.POST_MAIN_VIEW);
		} catch (Exception ex) {
			LogService.getInstance(this).error("分页获取岗位列表失败：" + ex.getMessage(), ex);
			mv = new ModelAndView(ModelAndViewConstants.ERROR_VIEW);
		}
		return mv;
	}
	
	/**
	 * 功能说明：进入添加界面
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:53:13
	 * @return
	 */
	@RequestMapping(value="/toAdd")
	public ModelAndView toAdd(){
		ModelAndView mv = null;
		try {
			Map<String,Object> param = new HashMap<String, Object>();
			param.put("status", "0");
			mv = new ModelAndView();
			mv.addObject(ModelAndViewConstants.OPERATION_KEY, ModelAndViewConstants.OPERATION_VALUE_ADD);
			mv.addObject(ModelAndViewConstants.TITLE_KEY, "添加岗位");
			mv.addObject("factory", null);
			mv.setViewName(ModelAndViewConstants.POST_EDIT_VIEW);
			LogService.getInstance(this).debug("进入岗位添加页："+ModelAndViewConstants.ROLE_EDIT_VIEW);
		} catch (Exception ex) {
			LogService.getInstance(this).error("岗位插入失败：" + ex.getMessage(), ex);
			mv = new ModelAndView(ModelAndViewConstants.ERROR_VIEW);
		}
		return mv;
	}
	
	/**
	 * 功能说明：进入编辑界面
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:53:39
	 * @param id
	 * @return
	 */
	@RequestMapping(value="/toEdit")
	public ModelAndView toEdit(Integer id){
		ModelAndView mv = null;
		try {
			Map<String,Object> param = new HashMap<String, Object>();
			param.put("status", "0");
			SysPost post = this.sysPostService.getByPrimaryKey(id);
			
			mv = new ModelAndView();
			mv.addObject(ModelAndViewConstants.OPERATION_KEY,ModelAndViewConstants.OPERATION_VALUE_EDIT);
			mv.addObject(ModelAndViewConstants.POST_MODEL, post);
			mv.addObject(ModelAndViewConstants.TITLE_KEY, "修改岗位");
			mv.addObject(ModelAndViewConstants.FACTORY_MODEL, null);
			mv.addObject("selectedFactoryId", 0);
			mv.setViewName(ModelAndViewConstants.POST_EDIT_VIEW);
			LogService.getInstance(this).debug("进入岗位编辑页："+ModelAndViewConstants.POST_EDIT_VIEW);
		} catch (Exception ex) {
			LogService.getInstance(this).error("角色岗位失败：" + ex.getMessage(), ex);
			mv = new ModelAndView(ModelAndViewConstants.ERROR_VIEW);
		}
		return mv;
	}
	
	/**
	 * 功能说明：执行删除操作
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:54:06
	 * @param id
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "/doDel")
	public Map<String, Object> toDel(Integer id){
		Map<String, Object> jsonResult = null;
		try {
			SysPost post = new SysPost();
			post.setId(id);
			post.setStatus(Constants.PERSISTENCE_DELETE_STATUS);
			Integer count = this.sysPostService.updateByPrimaryKey(post);
			String tabid = tabid(ModelAndViewConstants.POST_SYS_ID);
			if(count>0){
				String msg = "岗位删除成功";
				jsonResult = JsonResult.jsonReturn(Status.OK.getCode(), msg, tabid,false,"","");
				LogService.getInstance(this).debug("删除岗位成功，数量："+count);
			}else{
				String msg = "该数据已删除，请核对数据正确性，或重新刷新数据尝试。";
				jsonResult = JsonResult.jsonReturnErr(msg);
				LogService.getInstance(this).debug("删除岗位失败，数量："+count);
			}
		} catch (Exception ex) {
			String msg = "删除失败";
			jsonResult = JsonResult.jsonReturnErr(msg);
			LogService.getInstance(this).error("岗位删除失败：" + ex.getMessage(), ex);
		}
		return jsonResult;	
	}
	
	/**
	 * 功能说明：执行保存操作
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:54:28
	 * @param post
	 * @param op
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value="/doSave")
	public Map<String,Object> doSave(SysPost post ,String op){
		Map<String, Object> jsonResult = null;
		try {
			/**
			 * 添加操作
			 */
			String tabid = tabid(ModelAndViewConstants.POST_SYS_ID);
			if (null == op || ModelAndViewConstants.OPERATION_VALUE_ADD.equals(op)) {
				post.setStatus("0");
				this.sysPostService.insert(post);
				Integer statusCode = 200;
				String msg = "岗位添加成功";
				jsonResult = JsonResult.jsonReturn(statusCode.intValue(), msg, tabid);
				LogService.getInstance(this).debug("添加岗位成功!");
			} else {
				this.sysPostService.updateByPrimaryKey(post);			
				Integer statusCode = 200;
				String msg = "岗位修改信息成功";
				jsonResult = JsonResult.jsonReturn(statusCode.intValue(), msg, tabid);
				LogService.getInstance(this).debug("编辑岗位信息成功!");

			}
		} catch (Exception e) {
			String msg = "保存岗位信息失败"+e.getMessage();
			jsonResult = JsonResult.jsonReturnErr(msg);
			LogService.getInstance(this).debug("保存岗位信息失败!"+e.getMessage());
		}
		return jsonResult;	
	}
	/**
	 * 功能说明：执行名称验证操作
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:54:48
	 * @param postName
	 * @param op
	 * @param original
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value="/doNameValidate")
	public Map<String, Object> doNameValidate(String postName,String op,String original){
		Map<String,Object> jsonResult = null;
		try {
			String where = " BINARY PostName='"+postName+"' and Status='0' ";
			List<SysPost> list = this.sysPostService.getByWhere(where);
			if(list!=null){
				int count = list.size();
				switch (count) {
				case 0:
					jsonResult = JsonResult.jsonValidateReturn(true, "验证通过，该岗位可以使用");
					LogService.getInstance(this).debug("岗位验证通过，可使用");
					break;
				case 1:
					if(ModelAndViewConstants.OPERATION_VALUE_EDIT.equals(op)){
						if(postName.equals(original)){
							jsonResult = JsonResult.jsonValidateReturn(true, "验证通过，该岗位可以使用");
							LogService.getInstance(this).debug("岗位验证通过，可使用");
						}else{
							jsonResult = JsonResult.jsonValidateReturn(false, "该岗位已被使用");
							LogService.getInstance(this).debug("岗位已被使用");
						}
					}else{
						jsonResult = JsonResult.jsonValidateReturn(false, "该岗位已被使用");
						LogService.getInstance(this).debug("岗位已被使用");
					}
					break;
				default:
					jsonResult = JsonResult.jsonValidateReturn(false, "该岗位已被使用");
					LogService.getInstance(this).debug("岗位已被使用");
					break;
				}
			}else{
				jsonResult = JsonResult.jsonValidateReturn(false, "验证失败");
				LogService.getInstance(this).error("岗位验证失败");
			}
		} catch (Exception e) {
			jsonResult = JsonResult.jsonValidateReturn(false, "验证失败");
			LogService.getInstance(this).error("岗位验证失败");
		}
		return jsonResult;
	}
}
